home *** CD-ROM | disk | FTP | other *** search
- #if defined(FW_DEBUG) && defined(FW_BUILD_WIN) && !defined(FW_BUILD_WIN32S)
- // This entire file is for debugging Windows applications only
- //========================================================================================
- //
- // File: FWWTrace.cpp
- // Release Version: $ 1.0d1 $
- //
- // Creation Date: 3/28/94
- //
- // Copyright: © 1994 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #ifndef _INC_WINDOWS
- #include <Windows.h>
- #endif
-
- #ifndef _INC_TOOLHELP
- #include <toolhelp.h>
- #endif
-
- #ifndef FWWTRACE_H
- #include "FWWTrace.h"
- #endif
-
- #ifdef FW_BUILD_DOS
- #include <string.h>
- #define lstrcpy strcpy
- #endif
-
- //----------------------------------------------------------------------------------------
- // FW_PrivWinGetCallerInfo
- //----------------------------------------------------------------------------------------
- void FAR PASCAL FW_PrivWinGetCallerInfo(HANDLE* phModule,
- char* zModule,
- WORD* pwSegment,
- WORD* pwOffset,
- unsigned n_TraceDepth)
- {
- #ifndef FW_BUILD_DOS
- STACKTRACEENTRY StackEntry;
-
- WORD wSS, wCS, wIP, wBP;
-
- asm {
- mov wSS, SS
- mov wCS, CS
- };
-
- __emit__(0xE8, 0x00, 0x00); // call near $+0, equiv. to push IP
-
- asm {
- pop wIP
- mov wBP, BP
- };
-
- StackEntry.dwSize = sizeof(STACKTRACEENTRY);
- if (!StackTraceCSIPFirst(&StackEntry, wSS, wCS, wIP, wBP))
- {
- *phModule = 0;
- *pwSegment = 0;
- *pwOffset = 0;
-
- if (zModule != NULL)
- lstrcpy(zModule, "? fail ?");
-
- return;
- }
-
- while(n_TraceDepth-- > 0)
- StackTraceNext(&StackEntry);
-
- *phModule = StackEntry.hModule;
- *pwSegment = StackEntry.wSegment;
- *pwOffset = StackEntry.wIP;
-
- if (zModule != NULL)
- FW_PrivWinGetModuleName(StackEntry.hModule, zModule);
- #endif
- }
-
- //----------------------------------------------------------------------------------------
- // FW_PrivWinGetModuleName
- //----------------------------------------------------------------------------------------
- void FAR PASCAL FW_PrivWinGetModuleName(HANDLE hModule, char* zModule)
- {
- MODULEENTRY ModuleEntry;
- ModuleEntry.dwSize = sizeof(MODULEENTRY);
-
- #ifdef FW_BUILD_DOS
- lstrcpy(zModule, "? fail ?");
- #else
- if(ModuleFindHandle(&ModuleEntry, hModule))
- lstrcpy(zModule, ModuleEntry.szModule);
- else
- lstrcpy(zModule, "? fail ?");
- #endif
- }
-
- #endif
-